/*
  webscoket的特点
    1. 双向通信(通信不仅可以由前端发起，后端也可以主动向前端发送数据)
      可以保证实时性和通信效率(股票，篮球比分，群聊天)
    2. 长连接(http的每一次请求都会尝试连接和断开)
      只要不主动断开，就会一直保持连接的状态

  前端要使用h5新增的WebSocket功能: https://www.ruanyifeng.com/blog/2017/05/websocket.html
  后端用第三方的ws模块： https://www.npmjs.com/package/ws
*/

// 引入ws模块
const WebScocket = require("ws");

// 启动ws服务，并监听在8080端口上
const wss = new WebScocket.WebSocketServer({ port: 8080 });

// 监听连接
// 只要有一个前端用户连接了服务，就会执行后面的回调函数
// 这个函数的ws参数，表示的就是连接进来的那一个人
wss.on('connection', function connection(ws) {
  // 监听错误
  ws.on('error', console.error);

  // 监听前端给后端发送信息，并执行后面的回调函数
  // ws.on('message', function message(data) {
  //   // console.log('received: %s', data);
  //   ws.send(data + "");
  // });

  ws.on('message', function message(data, isBinary) {
    // wss.clients表示当前服务的所有的用户
    // 发送广播
    wss.clients.forEach(function each(client) {
      if (client.readyState === WebSocket.OPEN) {
        client.send(data, { binary: isBinary });
      }
    });
  });

  // 后端给前端发送字符串"something"
  // ws.send('something');
});